
import axios   from "axios";

const http = {
    /**
     * 携带token的get
     * @param url
     * @param callBack
     */
    get(url,callBack){
        //  自动携带token
        axios.get(url,{
            headers:{
                token:localStorage.getItem("token")
            }
        }).then((res)=>{
            if(res.data.code == '507'){// 续签成功了
                // 重新发送请求
                this.get(url,callBack);
            }else{
                callBack(res.data);
            }
        })
    },
    /**
     * 携带token的get
     * @param url
     * @param callBack
     */
    delete(url,callBack){
        //  自动携带token
        axios.delete(url,{
            headers:{
                token:localStorage.getItem("token")
            }
        }).then((res)=>{
            if(res.data.code == '507'){// 续签成功了
                // 重新发送请求
                this.get(url,callBack);
            }else{
                callBack(res.data);
            }
        })
    },
    /**
     * post请求封装
     * @param url
     * @param data
     * @param callBack
     */
    post(url,data,callBack){
        //  自动携带token
        axios.post(url,data,{
            headers:{
                token:localStorage.getItem("token")
            }
        }).then((res)=>{
            if(res.data.code == '507'){// 续签成功了
                // 重新发送请求
                this.post(url,data,callBack);
            }else{
                callBack(res.data);
            }
        })
    },
    /**
     * put
     * @param url
     * @param data
     * @param callBack
     */
    put(url,data,callBack){
        //  自动携带token
        axios.put(url,data,{
            headers:{
                token:localStorage.getItem("token")
            }
        }).then((res)=>{
            if(res.data.code == '507'){// 续签成功了
                // 重新发送请求
                this.post(url,data,callBack);
            }else{
                callBack(res.data);
            }
        })
    },
    // 分装两个同步请求
    // 同步请求中使用到了await，这个函数必须使用 async 修饰
    async getSync(url){
        // 通过请求通过await等待请求结束之后，将请求结果保存到result对象中
        let result = await axios.get(url,{
            headers:{
                token:localStorage.getItem("token")
            }
        });
        // 因为是同步请求，所以必须上面的请求完全结束，下面的语句才能正确执行
        // 返回result.data  这里的result就是我们之前异步请求中的res
        return result;
    },
    async postSync(url,data){
        let result = await  axios.post(url,data,{
            headers:{
                token:localStorage.getItem("token")
            }
        });
        return result;
    }
}

export default http;